// ==UserScript==
// @name         Micoua_江山笔
// @version      3.0.0
// @author       micoua
// @namespace    https://greasyfork.org/zh-CN/users/162781
// @description  江山笔

// @include      *

//               ↓ jQuery核心文件 ↓
// @require      http://libs.baidu.com/jquery/2.1.4/jquery.min.js

// @grant        unsafeWindow
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// ==/UserScript==

(function () {
    /** 测试专用 */
    var gm_data = {};
    function GM_setValue(str, data) { gm_data[str] = data; }
    function GM_getValue(str) { return gm_data[str]; }

    var testDataName = "setBtn";
    var dataObj = {
        tabBtn: testDataName,
        tabHead: ["序号", "选择器", "备注", "操作"],
        remark: {
            "1www.baidu.com": ["1a", "1b", "c1", "b1", "a1", "b1", "c1", "b1", "a1", "b", "c1", "b", "a", "b", "c", "b"],
            "www.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "www.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "www.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "www.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "2www.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "3www.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "4www.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "5www.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "6www.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "7www.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "8www.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "9www.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "0www.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "qwww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "wwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "ewww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "rwww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "twww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "ywww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "uwww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "iwww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "owww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "pwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "awww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "swww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "dwww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "fwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "gwww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "hwww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "jwww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "lwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "kwww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "zwww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "xwww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "cwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "1localhost:3000": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "2localhost:3000": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "localhost:3000": ["#text", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"]
        },
        dataList: {
            "1www.baidu.com": ["1a", "1b", "c1", "b1", "a1", "b1", "c1", "b1", "a1", "b", "c1", "b", "a", "b", "c", "b"],
            "www.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "www.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "www.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "www.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "2www.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "3www.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "4www.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "5www.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "6www.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "7www.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "8www.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "9www.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "0www.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "qwww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "wwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "ewww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "rwww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "twww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "ywww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "uwww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "iwww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "owww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "pwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "awww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "swww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "dwww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "fwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "gwww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "hwww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "jwww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "lwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "kwww.baidu.com": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "zwww.youku.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "xwww.taobao.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "cwww.jd.com": ["a1", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "a2", "b2", "c2", "b2", "aw", "b2", "c2", "b2"],
            "1localhost:3000": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "2localhost:3000": ["a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"],
            "localhost:3000": ["#text", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b", "a", "b", "c", "b"]
        }
    };
    GM_setValue(testDataName + "_data", dataObj);

    testDataName = "newBtn";
    var dataObj2 = {
        tabBtn: testDataName,
        tabHead: ["甲者", "乙者", "丙者", "丁者"],
        remark: {
            "www.taobao.com": ["a", "b", "b", "c"],
            "localhost:3000": ["a", "b", "b", "c"]
        },
        dataList: {
            "www.taobao.com": ["a", "b", "b", "c"],
            "localhost:3000": ["a", "b", "b", "c"]
        }
    };
    GM_setValue(testDataName + "_data", dataObj2);

    /** 是否最外 */
    if (self != top) { return; }

    /** 初始化JQ语法 */
    var $ = $ || window.$;

    /** 全局变量 */
    var giteeURL = "https://github.com/micoua/Resources/raw/master"; // 预定义Github路径头
    var emailURL = "https://mail.qq.com"; // 定义email按钮跳转网页路径
    var base64URL = "http://base64.xpcha.com"; // 定义base64按钮跳转网页路径
    var currentURL = window.location.href; // 当前网页地址
    var closeSecondBtnTag = true; // 收缩二级按钮标记

    /** 可控变量 */
    var listener_right = -35; // 监听者收缩右边距
    var listener_bottom = $(window).height() / 2; // 监听者底边距
    var changeMainBtnTime = 0.5; // 显隐主按钮的时间
    var changeSecondBtnTime = 0.2; // 显隐二级按钮的时间
    var pageNum = 10; // 每页记录展示的条数
    var micouaMainColor1 = "#fdf2f6"; // th背景、tr悬停背景、
    var micouaMainColor2 = "#e7a2b8a6"; // tr上下边框、td末格右边框、分页组件表格左右边框
    var micouaMainColor3 = "#e80049"; // 主次按钮边框、DIV外框、搜索框悬停(聚焦)边框、按钮悬停(按下)边框
    var micouaMainColor4 = "#ffffff"; // tr背景、空行背景、搜索行背景、搜索框背景、按钮按下字体、当前页码字体、页码按下字体
    var micouaMainColor5 = "#f8f8ffs"; // 搜索框背景、按钮背景
    var micouaMainColor6 = "#e8467980"; // th上下边框、按钮按下背景、当前页码背景、当前页码按下背景
    var micouaMainColor7 = "#cccccc"; // 搜索框(失焦)边框、按钮(失焦)边框、当前页码聚焦边框
    var micouaMainColor8 = "#e8467982"; // 搜索数据高亮
    var micouaMainColor9 = "#e796b08f"; // 搜索数据行悬停
    var operateBtn_confirm = "<input type='button' id='confirmBtn' class='btn' value='确认' />"; // 确认按钮
    var operateBtn_cancel = "<input type='button' id='cancelBtn' class='btn' value='取消' />"; // 取消按钮
    var operateBtn_main_clear = "<input type='button' id='clearMainBtn' class='btn' value='清空' />"; // 清空按钮_主体
    var operateBtn_main_set = "<input type='button' id='setMainBtn' class='btn' value='配置' />"; // 配置按钮_主体
    var operateBtn_main_save = "<input type='button' id='saveMainEleBtn' class='btn' value='保存' />"; // 保存按钮_主体
    var operateBtn_ele_test = "<input type='button' id='testEleBtn' class='btn' value='测试' />"; // 测试按钮_元素
    var operateBtn_ele_save = "<input type='button' id='saveEleBtn' class='btn' value='保存' />"; // 保存按钮_元素
    var operateBtn_ele_edit_head = "<input type='button' class='btn editEleBtn' value='编辑' "; // 编辑按钮_头_元素
    var operateBtn_ele_delete_head = "<input type='button' class='btn deleteEleBtn' value='删除' "; // 删除按钮_头_元素

    /** 基础入口 */
    function main() {
        callFunction().callListener(); // 监听者
        callFunction().callMainBtn(); // 主按钮
        callFunction().callSecondBtns(); // 二级按钮
        callFunction().callTabComponent(); // 表格组件
        callFunction().callAdvertList(); // 广告集合
        callFunction().callModify(); // 页面优化
        callFunction().callPublicStyle(); // 公共样式
    }

    /** 调用函数 */
    function callFunction() {
        /** 监听者 */
        function callListener() {
            baseFunction().listener().addDiv(); // 定义并添加监听者
            baseFunction().listener().setStyle(); // 配置监听者样式
            baseFunction().listener().setEvent(); // 配置监听者事件
        }

        /** 主按钮 */
        function callMainBtn() {
            baseFunction().mainBtn().addBtn(); // 定义并添加按钮
            baseFunction().mainBtn().setStyle(); // 配置按钮样式
            baseFunction().mainBtn().setEvent(); // 配置按钮事件
        }

        /** 二级按钮 */
        function callSecondBtns() {
            baseFunction().secondBtns().addBtn(); // 定义并添加二级按钮
            baseFunction().secondBtns().setStyle(); // 配置按钮样式
            baseFunction().secondBtns().setEvent(); // 配置按钮事件
        }

        /** 表格组件 */
        function callTabComponent() {
            baseFunction().tabComponent().addTab(); // 定义并添加表格
            baseFunction().tabComponent().setStyle(); // 配置表格样式
            // baseFunction().tabComponent().setEvent(); // 配置表格事件
        }

        /** 广告集合 */
        function callAdvertList() { }

        /** 页面优化 */
        function callModify() {
            baseFunction().pageModify().modify_youdao(); // 有道云
        }

        /** 公共样式 */
        function callPublicStyle() {
            publicStyle().setStyle_secondBtn(); // .secondBtn样式
            publicStyle().setStyle_tabCmpt_th(); // #tabCmpt th样式
            publicStyle().setStyle_tabCmpt_td(); // #tabCmpt td样式
        }

        /** 返回方法, 供外部使用 */
        return {
            callListener: callListener, // 监听者
            callMainBtn: callMainBtn, // 主按钮
            callSecondBtns: callSecondBtns, // 二级按钮
            callTabComponent: callTabComponent, // 表格组件
            callAdvertList: callAdvertList, // 广告集合
            callModify: callModify, // 页面优化
            callPublicStyle: callPublicStyle, // 公共样式
        };
    }

    /** 基础功能 */
    function baseFunction() {
        /** 监听者 */
        function listener() {
            /** 定义并添加监听者 */
            function addDiv() {
                $("body").append("<div id='listener' class='micoua listener'></div>");
            }

            /** 配置监听者样式 */
            function setStyle() {
                $("#listener").css({
                    "z-index": "2147483647",
                    position: "fixed",
                    right: listener_right,
                    bottom: listener_bottom,
                    width: "50px",
                    height: "70px",
                });
            }

            /** 配置监听者事件 */
            function setEvent() {
                $("#listener").bind("contextmenu", function () { return false; }); // 屏蔽鼠标右键
                // 主按钮事件
                var str_listener = "#listener";
                var str_mainBtn = "#mainBtn";
                $(str_listener).on("mouseenter", function () {
                    $(str_mainBtn).css({ display: "block" });
                    tools().moveAnimation(str_listener, changeMainBtnTime, listener_right, null); // 展开监听者
                }).on("mouseleave", function () {
                    if (closeSecondBtnTag) { tools().moveAnimation(str_listener, changeMainBtnTime, 0, null); } // 收缩监听者
                });
            }

            /** 返回方法, 供外部使用 */
            return {
                addDiv: addDiv, // 定义并添加监听者
                setStyle: setStyle, // 配置监听者样式
                setEvent: setEvent, // 配置按钮事件
            };
        }

        /** 主按钮 */
        function mainBtn() {
            /** 定义并添加按钮 */
            function addBtn() {
                $("#listener").append("<input type='button' id='mainBtn' class='micoua mainBtn' />");
            }

            /** 配置按钮样式 */
            function setStyle() {
                $("#mainBtn").css({
                    "z-index": "2147483647",
                    "border-radius": "25px",
                    margin: "10px 15px 10px 0px",
                    position: "fixed",
                    width: "50px",
                    height: "50px",
                    outline: "none",
                    border: "2px solid rgb(232, 0, 73)",
                    opacity: "0.3",
                    background: "url(" + giteeURL + "/Pictures/logo/micoua-50x50.png) center no-repeat"
                });
            }

            /** 配置按钮事件 */
            function setEvent() {
                var str_mainBtn = ".mainBtn";
                $(str_mainBtn).bind("contextmenu", function () { return false; }); // 屏蔽鼠标右键

                /* 鼠标点击 */
                $("#mainBtn").on("click", function () {
                    secondBtns().changeSecondBtn(changeSecondBtnTime); // 显隐二级按钮
                    if ($("#tabDiv").css("display") != "none") {
                        $("#micouaDiv").css({ transition: "all 0.5", visibility: "hidden" }); // 隐藏主DIV
                        $("#tabDiv").css({ transition: "all 0.5", visibility: "hidden" }); // 隐藏表格
                    }
                });

                /* 鼠标悬浮 */
                $(str_mainBtn).on("mouseenter", function () {
                    $(this).css({ cursor: "pointer" }); // 鼠标样式_手指
                    tools().opacityAnimation(str_mainBtn, 0.3, 0.7); // 高亮主按钮
                }).on("mouseleave", function () {
                    if (closeSecondBtnTag) { tools().opacityAnimation(str_mainBtn, 0.3, 0.3); } // 降亮主按钮
                });

                /* 鼠标按下 */
                $(str_mainBtn).mousedown(function () { $(this).css({ opacity: "1" }); });

                /* 鼠标释放 */
                $(str_mainBtn).mouseup(function () { $(this).css({ opacity: "0.7" }); });
            }

            /** 返回方法, 供外部使用 */
            return {
                addBtn: addBtn, // 定义并添加按钮
                setStyle: setStyle, // 配置按钮样式
                setEvent: setEvent, // 配置按钮事件
            };
        }

        /** 二级按钮 */
        function secondBtns() {
            /** 定义并添加二级按钮 */
            function addBtn() {
                $("body").append("<input type='button' id='setBtn' class='micoua secondBtn' />");
                $("body").append("<input type='button' id='newBtn' class='micoua secondBtn' />");
                $("body").append("<input type='button' id='micouaBtn' class='micoua secondBtn' />");
                $("body").append("<input type='button' id='emailBtn' class='micoua secondBtn' />");

                setStyle(); // 重置样式
            }

            /** 配置按钮样式 */
            function setStyle() {
                var secondBtns = $(".secondBtn");
                for (var i = 0; i < secondBtns.length; i++) {
                    var btn_id = secondBtns[i].id.substring(0, secondBtns[i].id.length - 3);
                    $("#" + secondBtns[i].id).css({ background: "url(" + giteeURL + "/Pictures/logo/" + btn_id + "-40x40.png) center no-repeat" });
                }

                // 重载公共样式
                publicStyle().setStyle_secondBtn();
            }

            /** 配置按钮事件 */
            function setEvent() {
                var str_secondBtn = ".secondBtn";
                $(str_secondBtn).bind("contextmenu", function () { return false; }); // 屏蔽鼠标右键

                /* 鼠标点击 */
                $(str_secondBtn).on("click", function () {
                    // 显隐表格
                    var tabDiv_visibility = $("#tabDiv").css("visibility");
                    var ele_id = $(this).attr("id");
                    var ele_tab_tag = $("#btnNameTag").attr("name") === ele_id;
                    if (tabDiv_visibility === "hidden" || !ele_tab_tag) {
                        tabComponent().loadData().getAll(ele_id);
                        $("#micouaDiv").css({ transition: "all 0.5s", visibility: "visible", opacity: "1" });
                        $("#tabDiv").css({ transition: "all 0.5s", visibility: "visible", opacity: "1" });
                        var search_web_text = $("#searchWebBtn").val();
                        $("#searchWebBtn").val("").focus().val(search_web_text); // 自动聚焦搜索框
                    } else if (ele_tab_tag) {
                        $("#micouaDiv").css({ transition: "all 0.5s", visibility: "hidden", opacity: "0" });
                        $("#tabDiv").css({ transition: "all 0.5s", visibility: "hidden", opacity: "0" });
                    }
                });

                /* 鼠标悬浮 */
                $(str_secondBtn).hover(function () {
                    $(this).css({ opacity: "0.7", cursor: "pointer" });
                }, function () {
                    $(this).css({ opacity: "0.5" });
                });

                /* 鼠标按下 */
                $(str_secondBtn).mousedown(function () { $(this).css({ opacity: "1" }); });
                /* 鼠标释放 */
                $(str_secondBtn).mouseup(function () { $(this).css({ opacity: "0.7" }); });
            }

            /** 更改二级按钮位置、透明度
             *  @param  changeTime 透明度变化的秒数(数值即可)
             */
            function changeSecondBtn(changeTime) {
                var destOpacity = 0.5;
                var str_secondBtn = ".secondBtn";
                // 仅当上一步操作完成时, 才继续下一步操作
                if (getSecondDoneTag(str_secondBtn, destOpacity)) {
                    tools().centreCircleScatterMove(str_secondBtn, changeTime); // 圆心散射位移
                    tools().showOrHiddenEle(str_secondBtn, changeTime, destOpacity); // 透明度调整
                    closeSecondBtnTag = closeSecondBtnTag ? false : true;
                }
            }

            /** 获取二级按钮完成状态
             *  @param  ele 需要改变透明度的元素的选择器填充内容(如 #id 名、.class 名)
             *  @param  destOpacity 透明度目标数值(小数值即可)
             */
            function getSecondDoneTag(ele, destOpacity) {
                var opacity = tools().getNum($(ele).css("opacity"));
                return (opacity === 0 || opacity === destOpacity) ? true : false;
            }

            /** 返回方法, 供外部使用 */
            return {
                addBtn: addBtn, // 定义并添加二级按钮
                setStyle: setStyle, // 配置按钮样式
                setEvent: setEvent, // 配置按钮事件
                changeSecondBtn: changeSecondBtn, // 更改二级按钮位置、透明度
                getSecondDoneTag: getSecondDoneTag, // 获取二级按钮完成状态
            };
        }

        /** 表格组件 */
        function tabComponent() {
            /** 定义并添加表格 */
            function addTab() {
                $("body").append("<div id='micouaDiv'><div id='tabDiv' class='micoua'><table id='tabCmpt'></table></div></div>");
            }

            /** 配置表格样式 */
            function setStyle() {
                // 右边距
                var count = $(".secondBtn").length;
                var tab_right = count > 1 ? count * 10 + 80 : 115;
                var tab_height = "500px";
                // 底边距
                var listener_height = tools().getNum($("#listener").css("height"));
                var div_bottom = listener_bottom - (tools().getNum(tab_height) - listener_height) / 2;

                // micouaDiv样式
                $("#micouaDiv").css({
                    visibility: "hidden",
                    position: "fixed",
                    width: "260px",
                    height: tab_height,
                    right: tab_right,
                    bottom: div_bottom
                });

                // 表格DIV样式
                $("#tabDiv").css({
                    "z-index": "2147483647",
                    "text-align": "center",
                    border: "1px solid " + micouaMainColor3,
                    visibility: "hidden",
                    position: "fixed",
                    width: "260px",
                    height: tab_height,
                    right: tab_right,
                    bottom: div_bottom
                });

                // 表格样式
                $("#tabCmpt").css({
                    "border-collapse": "collapse",
                    "text-align": "center",
                    "background-color": "white",
                    width: "100%",
                    height: tab_height
                });
            }

            /** 配置表格事件 */
            function setEvent() {
                // 清空按钮_主体
                $("#clearMainBtn").on("click", function () {
                    $("#searchWebBtn").focus().val("").change();
                    $("#searchWebBtn").attr("placeholder", "搜索网址域名");
                    $("#searchEleBtn").val("");
                    $("#searchEleBtn").attr("placeholder", "搜索选择器");
                });

                // 配置按钮_主体
                $("#setMainBtn").on("click", function () { alert("33"); });

                // 保存按钮_主体
                $("#saveMainBtn").on("click", function () { });

                // 测试按钮_元素
                $("#testEleBtn").on("click", function () {
                    var selectEleText = $("#tabCmpt #searchEleBtn").val(); // 搜索框内容_选择器
                    if (!tools().strIsEmpty(selectEleText)) {
                        $(selectEleText).css({ display: $(selectEleText).css("display") === "none" ? "block" : "none" });
                    }
                });

                // 保存按钮_元素
                $("#saveEleBtn").on("click", function () {
                    var dataName = $("#btnNameTag").attr("name");
                    var dataObj = GM_getValue(dataName + "_data");
                    var remark = dataObj.remark;
                    var dataList = dataObj.dataList;
                    var selectWebText = $("#tabCmpt #searchWebBtn").val(); // 搜索框内容_网址域名
                    var selectEleText = $("#tabCmpt #searchEleBtn").val(); // 搜索框内容_选择器

                    if (tools().strIsEmpty(selectEleText) || tools().strIsEmpty(selectWebText)) {
                        hintBox().opearteAll("请填写完整<strong class='selectText' style='color: " + micouaMainColor3 +
                            "'>网址域名</strong>和<strong class='selectText' style='color: " + micouaMainColor3 + "'>选择器</strong>");
                        $("#hintBoxDiv").css({ transition: "all 0.5s", opacity: "1", visibility: "visible" });

                    }

                    if (!tools().strIsEmpty(selectEleText) && !tools().strIsEmpty(selectWebText)) {
                        if (dataList[selectWebText] === undefined) {
                            remark[selectWebText] = [];
                            dataList[selectWebText] = [];
                        }

                        if ($.inArray(selectEleText, dataList[selectWebText]) === -1) {
                            remark[selectWebText].unshift("无备注"); // 添加记录备注_数据内容
                            dataList[selectWebText].unshift(selectEleText); // 添加记录数据_数据内容
                        } else {
                            // 已存在提示
                        }

                        GM_setValue(dataName + "_data", dataObj);
                        loadData().getTabDataList(dataName, 1);
                    }
                });

                // 编辑按钮_元素
                $(document).on("click", ".editEleBtn", function () { });

                // 删除按钮_元素
                $(document).on("click", ".deleteEleBtn", function () {
                    debugger
                    var dataName = $("#btnNameTag").attr("name");
                    confirmBox().opearteAll("确认删除?", tools().getCurrentPageNum(), Math.ceil(tools().getSearchDataCount(dataName) / pageNum));
                    $("#confirmBoxDiv").css({ transition: "all 0.5s", opacity: "1", visibility: "visible" });
                    if (!publicStyle().setStyle_confirmBoxDiv()) { return; }

                    var dataObj = GM_getValue(dataName + "_data");
                    var remark = dataObj.remark;
                    var dataList = dataObj.dataList;
                    var selectWebText = $("#tabCmpt #searchWebBtn").val(); // 搜索框内容_网址域名
                    var selectEleText = $("#tabCmpt #searchEleBtn").val(); // 搜索框内容_选择器

                    remark[selectWebText].splice($.inArray($(this).attr("delRemarkVal"), remark[selectWebText]), 1);
                    dataList[selectWebText].splice($.inArray($(this).attr("delDataVal"), dataList[selectWebText]), 1);
                    GM_setValue(dataName + "_data", dataObj);

                    var dataCount = tools().getSearchDataCount(dataName);
                    var currentPageNum = dataCount % pageNum === 0 ? tools().getCurrentPageNum() - 1 : tools().getCurrentPageNum();
                    currentPageNum = currentPageNum < 1 ? 1 : currentPageNum;
                    loadData().getTabDataList(dataName, currentPageNum);
                });
            }

            /** 动态添加数据 */
            function loadData() {
                /** 获取所有数据
                 *  @param dataName 存储在 GM 中的数据名称头
                 */
                function getAll(dataName) {
                    $("#tabCmpt tr").remove(); // 清除原数据
                    var dataListEle = GM_getValue(dataName + "_data").dataList[getCurrentWeb(dataName)];
                    var dataListSize = dataListEle === undefined ? 0 : dataListEle.length;
                    getTabHead(dataName); // 获取表头数据
                    getSearchRow(dataName); // 获取搜索行数据
                    getTabDataList(dataName, 1); // 获取分页记录数据

                    publicStyle().setStyle_tabCmpt_th(); // 表头样式
                    publicStyle().setStyle_tabCmpt_tr(); // 整行样式
                    publicStyle().setStyle_tabCmpt_td(); // 表格样式
                    publicStyle().setStyle_tabCmpt_searchBtn(); // 搜索框样式
                    publicStyle().setStyle_tabCmpt_btn(); // 按钮样式
                    publicStyle().setStyle_tabCmpt_pageNumBtn(1, Math.ceil(dataListSize / pageNum)); // 分页组件样式
                }

                /** 获取表头数据
                 *  @param dataName 存储在 GM 中的数据名称头
                 */
                function getTabHead(dataName) {
                    var dataObj = GM_getValue(dataName + "_data");
                    $("#tabHead").remove(); // 清除原数据
                    $("#btnNameTag").remove(); // 清除原数据
                    var dataStr = "<tr id='tabHead'>";
                    var tabHead = dataObj.tabHead;
                    for (var i = 0; i < tabHead.length; i++) {
                        dataStr += "<th>" + tabHead[i] + "</th>";
                        if (i === tabHead.length - 1) { dataStr += "</tr>"; }
                    }
                    $("#tabCmpt").prepend(dataStr);
                    // 隐藏标识
                    $("#tabCmpt").append("<div id='btnNameTag' name='" + dataName + "' style='display: none'>此乃隐藏标识, 可明二级按钮</div>");

                    publicStyle().setStyle_tabCmpt_th(); // 表头样式
                    publicStyle().setStyle_tabCmpt_tr(); // 整行样式
                }

                /** 获取搜索行数据
                 *  @param dataName 存储在 GM 中的数据名称头
                 */
                function getSearchRow(dataName) {
                    $(".tabSearchRow").remove(); // 清除原数据
                    var dataObj = GM_getValue(dataName + "_data");
                    var currentWeb = getCurrentWeb(dataName);
                    currentWeb = tools().strIsEmpty(currentWeb) ? currentURL : currentWeb;

                    /* 定义并添加搜索框 */
                    var searchWeb = "<tr id='tabSearchWebRow' class='tabSearchRow'><td colspan=100% align='center'><input type='text' id='searchWebBtn' placeholder='搜索网址域名' " +
                        "class='searchBtn' value='" + currentWeb + "' onKeypress='javascript:if(event.keyCode == 32)event.returnValue = false;' />" + operateBtn_main_clear + operateBtn_main_set + "</td></tr>";
                    var searchEle = "<tr id='tabSearchEleRow' class='tabSearchRow'><td colspan=100% align='center'><input type='text' id='searchEleBtn' placeholder='搜索选择器' " +
                        "class='searchBtn' />" + operateBtn_ele_test + operateBtn_ele_save + "</td></tr>";
                    $("#tabCmpt #tabHead").before(searchWeb + searchEle);

                    setEvent(); // 按钮事件
                    publicStyle().setStyle_tabCmpt_tr(); // 整行样式
                    publicStyle().setStyle_tabCmpt_td(); // 表格样式
                    publicStyle().setStyle_tabCmpt_searchBtn(); // 搜索框样式
                    publicStyle().setStyle_tabCmpt_btn(); // 按钮样式
                }

                /** 搜索数据列表
                 *  @param  ele 需要获取数据的选择器填充内容(如 #id 名、.class 名)
                 */
                function getSearchDataList(ele) {
                    $("#searchDiv").remove(); // 清除原列表
                    var dataName = $("#btnNameTag").attr("name");
                    var dataObj = GM_getValue(dataName + "_data");
                    var remark = dataObj.remark;
                    var dataList = dataObj.dataList;
                    var selectWebText = $("#searchWebBtn").val(); // 搜索框内容_网址域名
                    var selectEleText = $("#searchEleBtn").val(); // 搜索框内容_选择器
                    var currentWeb = getCurrentWeb(dataName);
                    currentWeb = tools().strIsEmpty(currentWeb) ? currentURL : currentWeb;

                    /* 定义并添加列表 */
                    $("#micouaDiv").append("<div id='searchDiv' clss='micoua'><table id='searchTab'></table></div>");

                    /* 配置数据列表样式 */
                    var ele_margin = $(ele).css("margin");
                    var tab_margin = ($(ele).offset().top - $("#tabDiv").offset().top + tools().getNum($(ele).css("height")) + tools().getNum(ele_margin) * 2 + 4) + "px " + ele_margin;
                    var tab_width = (tools().getNum($("#tabCmpt").css("width")) - tools().getNum(ele_margin) * 2 - 4) + "px";
                    $("#searchDiv").css({
                        "z-index": "2147483647",
                        "border-radius": "5px",
                        "background-color": micouaMainColor5,
                        border: "1px solid " + micouaMainColor3,
                        position: "absolute",
                        overflow: "auto",
                        margin: tab_margin,
                        width: tab_width,
                        height: "130px",
                        opacity: 0.9
                    });

                    $("#searchTab").css({ width: "100%" });

                    /* 获取数据列表 */
                    var dataStr = "";
                    if (tools().strIsEmpty(selectWebText)) {
                        dataStr += "<tr value='" + currentWeb + "'><td class='selectWeb' aglin='center'>" +
                            "<font style='color: " + micouaMainColor3 + "; font-size: 10px'>当前网址：" + currentWeb + "</font></td></tr>";
                    }
                    for (var webName in dataList) {
                        if (tools().strIsEmpty(selectWebText)) {
                            dataStr += "<tr value='" + webName + "'><td class='selectWeb'>" + webName + "</td></tr>";
                        } else if (webName.toLowerCase().indexOf(selectWebText.toLowerCase()) != -1) {
                            var webNameStrHead = webName.substring(0, webName.toLowerCase().indexOf(selectWebText.toLowerCase()));
                            var webNameStrTail = webName.substring(webName.toLowerCase().indexOf(selectWebText.toLowerCase()) + selectWebText.length, webName.length);
                            var webNameStr = webNameStrHead + "<strong class='selectText'>" + selectWebText + "</strong>" + webNameStrTail;
                            dataStr += "<tr value='" + webName + "'><td class='selectWeb'>" + webNameStr + "</td></tr>";
                        }
                    }
                    $("#searchTab").append(dataStr);

                    var removeDivTag = tools().strIsEmpty(dataStr);
                    if (!tools().strIsEmpty(selectWebText)) {
                        for (var i = 0; i < $("#searchDiv tr").length; i++) {
                            if ($("#searchDiv tr")[i].innerText.toLowerCase() === selectWebText.toLowerCase()) { removeDivTag = true; }
                        }
                    }

                    if (removeDivTag) { $("#searchDiv").remove(); }
                    publicStyle().setStyle_searchTab_tr();
                }

                /** 获取表内数据
                 *  @param  dataName 存储在 GM 中的数据名称头
                 *  @param  currentPageNum 当前页码
                 */
                function getTabDataList(dataName, currentPageNum) {
                    $(".tabDataList").remove(); // 清除原数据
                    var dataObj = GM_getValue(dataName + "_data");
                    var selectWeb = getCurrentSearchWeb(dataName);
                    var selectEle = $("#searchEleBtn").val();

                    var allDataList = dataObj.dataList[selectWeb]; // 所有数据
                    var allRemark = dataObj.remark[selectWeb]; // 备注信息
                    var totalPageNum = allDataList === undefined ? 1 : Math.ceil(allDataList.length / pageNum); // 总页数
                    var dataList = [];
                    var remark = [];
                    if (allDataList != undefined && !tools().strIsEmpty(selectEle)) {
                        for (var num in allDataList) {
                            if (allDataList[num].toLowerCase().indexOf(selectEle.toLowerCase()) != -1) { dataList.push(allDataList[num]); remark.push(allRemark[num]); }
                        }
                    } else {
                        dataList = allDataList;
                        remark = allRemark;
                    }

                    totalPageNum = dataList === undefined ? 1 : Math.ceil(dataList.length / pageNum);
                    var dataStr = "";
                    var nullRow = 0;
                    for (var i = 0, dataRowNum = (currentPageNum - 1) * pageNum; i < pageNum; i++, dataRowNum++) {
                        if (dataList === undefined || dataList[dataRowNum] === undefined) { dataStr += "<tr class='tabDataList'><td class='nullRow' colspan=" + dataObj.tabHead.length + "></td></tr>"; continue; }

                        var rowData = dataList[dataRowNum];
                        var rowRemark = remark[dataRowNum];

                        if (tools().strIsEmpty(selectEle)) {
                            dataStr += "<tr class='tabDataList'>";
                            dataStr += "<td>" + (dataRowNum + 1) + "</td>"; // 首格_序号
                            dataStr += "<td>" + rowData + "</td>"; // 次格_数据记录
                            dataStr += "<td>" + rowRemark + "</td>"; // 三格_备注信息
                            dataStr += "<td class='lastTd'>" + operateBtn_ele_edit_head + "delDataVal='" + rowData + "' delRemarkVal='" + rowRemark + "' />"; // 末格_编辑按钮
                            dataStr += operateBtn_ele_delete_head + "delDataVal='" + rowData + "' delRemarkVal='" + rowRemark + "' /></td>"; // 末格_删除按钮
                            dataStr += "</tr>";
                        } else if (rowData.toLowerCase().indexOf(selectEle.toLowerCase()) === -1 && rowRemark.toLowerCase().indexOf(selectEle.toLowerCase()) === -1) {
                            nullRow++;
                        } else {
                            dataStr += "<tr class='tabDataList'>";
                            dataStr += "<td>" + (dataRowNum + 1) + "</td>"; // 首格_序号
                            // 次格_数据记录
                            if (rowData.toLowerCase().indexOf(selectEle.toLowerCase()) != -1) {
                                var eleNameStrHead_data = rowData.substring(0, rowData.toLowerCase().indexOf(selectEle.toLowerCase()));
                                var eleNameStrtail_data = rowData.substring(rowData.toLowerCase().indexOf(selectEle.toLowerCase()) + selectEle.length, rowData.length);
                                var eleNameStr_data = eleNameStrHead_data + "<strong class='selectText' style='color: " + micouaMainColor8 + "'>" + selectEle + "</strong>" + eleNameStrtail_data;
                                dataStr += "<td>" + eleNameStr_data + "</td>";
                            } else {
                                dataStr += "<td>" + rowData + "</td>";
                            }

                            // 三格_备注信息
                            if (rowRemark.toLowerCase().indexOf(selectEle.toLowerCase()) != -1) {
                                var eleNameStrHead_remark = rowRemark.substring(0, rowRemark.toLowerCase().indexOf(selectEle.toLowerCase()));
                                var eleNameStrtail_remark = rowRemark.substring(rowRemark.toLowerCase().indexOf(selectEle.toLowerCase()) + selectEle.length, rowRemark.length);
                                var eleNameStr_remark = eleNameStrHead_remark + "<strong class='selectText' style='color: " + micouaMainColor8 + "'>" + selectEle + "</strong>" + eleNameStrtail_remark;
                                dataStr += "<td>" + eleNameStr_remark + "</td>";
                            } else {
                                dataStr += "<td>" + rowRemark + "</td>";
                            }

                            dataStr += "<td class='lastTd'>" + operateBtn_ele_edit_head + "delDataVal='" + rowData + "' delRemarkVal='" + rowRemark + "' />"; // 末格_编辑按钮
                            dataStr += operateBtn_ele_delete_head + "delDataVal='" + rowData + "' delRemarkVal='" + rowRemark + "' /></td>"; // 末格_删除按钮
                            dataStr += "</tr>";
                        }
                    }
                    while (nullRow > 0) { dataStr += "<tr class='tabDataList'><td class='nullRow' colspan=" + dataObj.tabHead.length + "></td></tr>"; nullRow--; }

                    $("#tabCmpt #tabHead").after(dataStr);

                    getPagination(dataList === undefined ? 1 : dataList.length, currentPageNum);
                    publicStyle().setStyle_tabCmpt_tr(); // 整行样式
                    publicStyle().setStyle_tabCmpt_td(); // 表格样式
                    publicStyle().setStyle_tabCmpt_btn(); // 按钮样式
                    publicStyle().setStyle_tabCmpt_pageNumBtn(currentPageNum, totalPageNum); // 分页组件样式
                }

                /** 获取当前网址域名
                 *  @param dataName 存储在 GM 中的数据名称头
                 */
                function getCurrentWeb(dataName) {
                    var dataObj = GM_getValue(dataName + "_data");
                    var currentWeb = "";
                    for (var rowData in dataObj.dataList) {
                        if (currentURL.toLowerCase().indexOf(rowData.toLowerCase()) != -1) { currentWeb = rowData; break; }
                    }
                    return currentWeb;
                }

                /** 获取当前搜索框网址域名
                 *  @param dataName 存储在 GM 中的数据名称头
                 */
                function getCurrentSearchWeb(dataName) {
                    var dataObj = GM_getValue(dataName + "_data");
                    var currentSearchWeb = "";
                    var searchWebText = $("#searchWebBtn").val();
                    for (var rowData in dataObj.dataList) {
                        if (!tools().strIsEmpty(searchWebText) && (rowData.toLowerCase() === searchWebText.toLowerCase())) { currentSearchWeb = rowData; break; }
                    }
                    return currentSearchWeb;
                }

                /** 返回方法, 供外部使用 */
                return {
                    getAll: getAll, // 获取所有数据
                    getTabHead: getTabHead, // 获取表头数据
                    getSearchRow: getSearchRow, // 获取搜索行数据
                    getSearchDataList: getSearchDataList, // 搜索数据列表
                    getTabDataList: getTabDataList, // 获取表内数据
                    getCurrentWeb: getCurrentWeb, // 获取当前网址域名
                    getCurrentSearchWeb: getCurrentSearchWeb, // 获取当前搜索框网址域名
                };
            }

            /** 分页组件
             *  @param  dataTotalCount 总数据条数
             *  @param  currentPageNum 当前页码
             */
            function getPagination(dataTotalCount, currentPageNum) {
                /* 移除原有分页组件 */
                $("#tabCmpt #pagination").remove();

                /* 定义并添加分页按钮 */
                var pageBtn = "<tr id='pagination'><td colspan=100% id='paginationTd'>";
                pageBtn += "<input type='button' id='firstPageNum' class='btn pageNumBtn changeAllPageBtn' value='☾1☽'/>";
                pageBtn += "<input type='button' id='prePageNum' class='btn pageNumBtn changeOnePageBtn' value='◀'/>";
                var totalPageNum = Math.ceil(dataTotalCount / pageNum); // 总页数
                totalPageNum = totalPageNum < 1 ? 1 : totalPageNum;
                var centerPageNum = currentPageNum < 3 ? 3 : currentPageNum;
                if (totalPageNum - currentPageNum < 3) { centerPageNum = totalPageNum - 2; }
                for (var i = centerPageNum - 2; i <= (i < 1 ? totalPageNum : centerPageNum + 2); i++) {
                    if (totalPageNum < i) { break; } else if (i < 1) { continue; }
                    pageBtn += "<input type='button' id='pageNum" + i + "' class='btn pageNumBtn' value='" + i + "'/>";
                }
                pageBtn += "<input type='button' id='nextPageNum' class='btn pageNumBtn changeOnePageBtn' value='▶'/>";
                pageBtn += "<input type='button' id='lastPageNum' class='btn pageNumBtn changeAllPageBtn' value='☾" + totalPageNum + "☽'/>";
                pageBtn += "</td></tr>";
                $("#tabCmpt").append(pageBtn);

                /* 为每个按钮赋值 */
                // 普通页码按钮
                $("#tabCmpt .pageNumBtn").on("click", function () {
                    loadData().getTabDataList($("#btnNameTag").attr("name"), tools().getNum($(this).attr("value")));
                    getPagination(dataTotalCount, tools().getNum($(this).attr("value")));
                });
                // 首页页码
                $("#tabCmpt #firstPageNum").on("click", function () {
                    loadData().getTabDataList($("#btnNameTag").attr("name"), 1);
                    getPagination(dataTotalCount, 1);
                });
                // 上页页码
                $("#tabCmpt #prePageNum").on("click", function () {
                    loadData().getTabDataList($("#btnNameTag").attr("name"), currentPageNum - 1);
                    getPagination(dataTotalCount, currentPageNum - 1);
                });
                // 下页页码
                $("#tabCmpt #nextPageNum").on("click", function () {
                    loadData().getTabDataList($("#btnNameTag").attr("name"), currentPageNum + 1);
                    getPagination(dataTotalCount, currentPageNum + 1);
                });
                // 尾页页码
                $("#tabCmpt #lastPageNum").on("click", function () {
                    loadData().getTabDataList($("#btnNameTag").attr("name"), totalPageNum);
                    getPagination(dataTotalCount, totalPageNum);
                });

                /* 重置样式 */
                publicStyle().setStyle_tabCmpt_btn(); // 按钮样式
                publicStyle().setStyle_tabCmpt_pageNumBtn(currentPageNum, totalPageNum); // 分页组件样式
            }

            /** 返回方法, 供外部使用 */
            return {
                addTab: addTab, // 定义并添加表格
                setStyle: setStyle, // 配置表格样式
                setEvent: setEvent, // 配置表格事件
                loadData: loadData, // 动态添加数据
                getPagination: getPagination, // 分页组件
            };
        }

        /** 广告集合 */
        function advertList() { }

        /** 页面优化 */
        function pageModify() {
            /** 有道云 */
            function modify_youdao() {
                setInterval(function () {
                    $("#bulb-editor").contents().find("td").css({ border: "none" }); // 调整表格样式
                }, 30);
            }

            /** 返回方法, 供外部使用 */
            return {
                modify_youdao: modify_youdao, // 有道云
            };
        }

        /** 提示框 */
        function hintBox() {
            /** 完整操作
             *  @param  hintText 要展示的字符
             */
            function opearteAll(hintText) {
                addHintBox(hintText);
                setStyle();
                setEvent();

                publicStyle().setStyle_hintBoxDiv();
            }

            /** 定义并添加提示框
             *  @param  hintText 要展示的字符
             */
            function addHintBox(hintText) {
                $("#micouaDiv").append("<div id='hintBoxDiv' clss='micoua'>" + hintText + "</div>");
            }

            /** 配置提示框样式 */
            function setStyle() {
                $("#hintBoxDiv").css({
                    "z-index": "2147483647",
                    "border-radius": "5px",
                    "background-color": micouaMainColor1,
                    "text-align": "center",
                    "font-size": "12px",
                    padding: "20px 10px 15px 10px",
                    border: "1px solid " + micouaMainColor3,
                    position: "absolute",
                    width: "70%",
                    height: "5%",
                    margin: "auto",
                    visibility: "hidden",
                    opacity: "0",
                    top: "-50px",
                    right: "4px",
                    bottom: "0",
                    left: "0"
                });
            }

            /** 配置提示框事件 */
            function setEvent() {

            }

            /** 返回方法, 供外部使用 */
            return {
                opearteAll: opearteAll, //完整操作
                addHintBox: addHintBox, // 定义并添加提示框
                setStyle: setStyle, // 配置提示框样式
                setEvent: setEvent, // 配置提示框事件
            };
        }

        /** 确认框 */
        function confirmBox() {
            /** 完整操作
             *  @param  confirmText 要展示的字符
             *  @param  currentPageNum 当前页码
             *  @param  totalPageNum 总页码
             */
            function opearteAll(confirmText, currentPageNum, totalPageNum) {
                addConfirmBox(confirmText);
                setStyle();
                setEvent();

                publicStyle().setStyle_tabCmpt_btn();
                publicStyle().setStyle_tabCmpt_pageNumBtn(currentPageNum, totalPageNum);
            }

            /** 定义并添加确认框
             *  @param  confirmText 要展示的字符
             */
            function addConfirmBox(confirmText) {
                $("#micouaDiv").append("<div id='confirmBoxDiv' clss='micoua'>" + confirmText + "<br>" + operateBtn_confirm + operateBtn_cancel + "</div>");
            }

            /** 配置确认框样式 */
            function setStyle() {
                $("#confirmBoxDiv").css({
                    "z-index": "2147483647",
                    "border-radius": "5px",
                    "background-color": micouaMainColor1,
                    "text-align": "center",
                    "font-size": "12px",
                    padding: "10px 5px 25px 5px",
                    border: "1px solid " + micouaMainColor3,
                    position: "absolute",
                    width: "70%",
                    height: "5%",
                    margin: "auto",
                    visibility: "hidden",
                    opacity: "0",
                    top: "-50px",
                    right: "4px",
                    bottom: "0",
                    left: "0"
                });
            }

            /** 配置确认框事件 */
            function setEvent() { }

            /** 返回方法, 供外部使用 */
            return {
                opearteAll: opearteAll, //完整操作
                addConfirmBox: addConfirmBox, // 定义并添加确认框
                setStyle: setStyle, // 配置确认框样式
                setEvent: setEvent, // 配置确认框事件
            };
        }

        /** 返回方法, 供外部使用 */
        return {
            listener: listener, // 监听者
            mainBtn: mainBtn, // 主按钮
            secondBtns: secondBtns, // 二级按钮
            tabComponent: tabComponent, // 表格组件
            advertList: advertList, // 广告集合
            pageModify: pageModify, // 页面优化
            hintBox: hintBox, // 提示框
            confirmBox: confirmBox, // 确认框
        };
    }

    /** 实用工具 */
    function tools() {
        /** 将字符类型转换为数值
         *  @param  pixel 以 px 结尾的像素值 或 以 % 结尾的百分值
         */
        function getNum(pixel) {
            var count = 0;
            var pixelStr = pixel.toString();
            if (pixelStr.toLowerCase().indexOf("%") != -1) { count = 1; }
            if (pixelStr.toLowerCase().indexOf("px") != -1) { count = 2; }
            pixelStr = pixelStr.substring(0, pixelStr.length - count);
            return pixelStr.toLowerCase().indexOf(".") === -1 ? parseInt(pixelStr) : parseFloat(pixelStr);
        }

        /** 获取当前数据总条数
         *  @param  dataName 存储在 GM 中的数据名称头
         */
        function getDataCount(dataName) {
            var dataList = GM_getValue(dataName + "_data").dataList[baseFunction().tabComponent().loadData().getCurrentSearchWeb(dataName)];
            return dataList === undefined ? 0 : dataList.length;
        }

        /** 获取当前搜索数据结果总条数
         *  @param  dataName 存储在 GM 中的数据名称头
         */
        function getSearchDataCount(dataName) {
            var dataCount = 0;
            var dataList = [];
            var dataObj = GM_getValue(dataName + "_data");
            var selectWeb = baseFunction().tabComponent().loadData().getCurrentSearchWeb(dataName);
            var selectEle = $("#searchEleBtn").val();
            var allDataList = dataObj.dataList[selectWeb];
            if (tools().strIsEmpty(selectEle)) {
                dataCount = allDataList.length;
            } else if (allDataList != undefined) {
                for (var num in allDataList) { if (allDataList[num].toLowerCase().indexOf(selectEle.toLowerCase()) != -1) { dataCount++; } }
            }
            return dataCount;
        }

        /** 获取当前页码 */
        function getCurrentPageNum() {
            return tools().getNum($("#tabCmpt input[status='currentPage']").attr("value"));
        }

        /** 开关按钮 */
        function switchBtn() {
            /** 完成操作
             *  @param  ele 需要添加按钮的选择器填充内容(如 #id 名、.class 名)
             *  @param  dataName 存储在 GM 数据池里面作为开关标识的名称
             */
            function opearteAll(ele, dataName) {
                addSwitchBtn(ele, dataName);
                setSwitchStyle();
            }

            /** 添加开关按钮 */
            function addSwitchBtn(ele, dataName) {
                // 移除原有开关按钮
                $("#outDiv").remove();
                // 获取当前开关状态
                var switchStatus = GM_getValue(dataName);
                // 设置当前开关外类名
                var switchClassName_out = switchStatus === false ? "outClose" : "outOpen";
                // 设置当前开关内类名
                var switchClassName_inner = switchStatus === false ? "innerClose" : "innerOpen";
                // 定义开关按钮
                var switchBtn = "<div id='outDiv' class='" + switchClassName_out + "'><div id='innerDiv' class='" + switchClassName_inner + "'></div></div>";
                // 在指定元素内添加开关按钮
                $(ele).append(switchBtn);
                $("#outDiv").on("click", function () { toggleSwitchStatus(dataName, switchStatus); });
                // 配置开关样式
                setSwitchStyle();
            }

            /** 配置开关样式 */
            function setSwitchStyle() {
                // 默认高度
                var size = 20;
                // 开关打开外样式
                $(".outOpen").css({
                    "border-radius": size + "px",
                    width: 1.8 * size + "px",
                    height: size + "px",
                    border: "1px solid rgba(0,184,0,0.8)",
                    background: "rgba(0,184,0,0.8)",
                    cursor: "pointer"
                });
                // 开关关闭外样式
                $(".outClose").css({
                    "border-radius": size + "px",
                    width: 1.8 * size + "px",
                    height: size + "px",
                    border: "1px solid rgba(125,125,125,0.5)",
                    background: "rgba(255,255,255,1)",
                    cursor: "pointer"
                });
                // 开关打开内样式
                $(".innerOpen").css({
                    "border-radius": (size - 5) + "px",
                    width: (size - 4) + "px",
                    height: (size - 4) + "px",
                    margin: "1px 1px 1px " + (0.8 * size + 1) + "px",
                    border: "1px solid rgba(0,184,0,0.8)",
                    background: "rgba(255,255,255,1)",
                    cursor: "pointer"
                });
                // 开关关闭内样式
                $(".innerClose").css({
                    "border-radius": (size - 5) + "px",
                    width: (size - 4) + "px",
                    height: (size - 4) + "px",
                    margin: "1px",
                    border: "1px solid rgba(125,125,125,0.5)",
                    background: "rgba(255,255,255,1)",
                    cursor: "pointer"
                });
            }

            /** 切换开关状态 */
            function toggleSwitchStatus(dataName, switchStatus) {
                if (switchStatus === undefined ? true : switchStatus) {
                    $("#outDiv").attr("class", "outClose");
                    $("#innerDiv").attr("class", "innerClose");
                    GM_setValue(dataName, false);
                } else {
                    $("#outDiv").attr("class", "outOpen");
                    $("#innerDiv").attr("class", "innerOpen");
                    GM_setValue(dataName, true);
                }
                setSwitchStyle(); // 重置开关样式
                window.location.href = currentURL; // 重载页面
            }

            /** 返回方法, 供外部使用 */
            return {
                opearteAll: opearteAll, // 完成操作
                addSwitchBtn: addSwitchBtn, // 添加开关按钮
                setSwitchStyle: setSwitchStyle, // 配置开关样式
                toggleSwitchStatus: toggleSwitchStatus, // 切换开关状态
            };
        }

        /** 显隐元素
         *  @param  ele 需要显隐元素的选择器填充内容(如 #id 名、.class 名)
         *  @param  changeTime 透明度变化的秒数(数值即可)
         *  @param  destOpacity 透明度目标数值(小数值即可)
         */
        function showOrHiddenEle(ele, changeTime, destOpacity) {
            var currentOpacity = tools().getNum($(ele).css("opacity"));
            if (currentOpacity === destOpacity) {
                $(ele).css({ transition: "all " + changeTime + "s", visibility: "hidden", opacity: 0 }); // 隐藏元素
            } else {
                $(ele).css({ transition: "all " + changeTime + "s", visibility: "visible", opacity: destOpacity }); // 显示元素
            }
        }

        /** 透明度动作
         *  @param  ele 需要改变透明度的元素的选择器填充内容(如 #id 名、.class 名)
         *  @param  changeTime 透明度变化的秒数(数值即可)
         *  @param  destOpacity 透明度目标数值(小数值即可)
         */
        function opacityAnimation(ele, changeTime, destOpacity) {
            $(ele).css({ transition: "opacity " + changeTime + "s", opacity: destOpacity });
        }

        /** 位移动作
         *  @param  ele 需要位移的元素的选择器填充内容(如 #id 名、.class 名)
         *  @param  changeTime 位移的秒数(数值即可)
         *  @param  changeRange_horizontal 水平位移元素的距离(纯数字即可, 正数往右, 负数往左)
         *  @param  changeRange_vertical 垂直位移元素的距离(纯数字即可, 正数往下, 负数往上)
         */
        function moveAnimation(ele, changeTime, changeRange_horizontal, changeRange_vertical) {
            // 水平移动
            if (changeRange_horizontal != null && changeRange_vertical == null) {
                $(ele).css({ transition: "transform " + changeTime + "s", transform: "translateX(" + changeRange_horizontal + "px)" });
            }

            // 垂直移动
            if (changeRange_horizontal === null && changeRange_vertical != null) {
                $(ele).css({ transition: "transform " + changeTime + "s", transform: "translateY(" + changeRange_vertical + "px)" });
            }

            // 任意移动
            if (changeRange_horizontal != null && changeRange_vertical != null) {
                $(ele).css({ transition: "transform " + changeTime + "s", transform: "translate(" + changeRange_horizontal + "px," + changeRange_vertical + "px)" });
            }
        }

        /** 圆心散射位移动作
         *  @param  ele 需要位移的元素的选择器填充内容(如 #id 名、.class 名)
         *  @param  changeTime 位移的秒数(数值即可)
         */
        function centreCircleScatterMove(ele, changeTime) {
            // 获取位移元素个数
            var count = $(ele).length;
            if ($(ele).css("transform") != "none") {
                /* 收缩元素 */
                for (var i = 0; i < count; i++) { moveAnimation("#" + $(ele)[i].id, changeTime, 0, 0); }
                $(ele).css({ transform: "none" });
            } else {
                /* 展开元素 */
                // 计算平均弧度数
                var radianNum = (2 * Math.PI / 360) * (180 / (count - 1));

                // 遍历计算各个元素散射目标值, 并调用位移动作
                var upDownTag = (count + 1) / 2 - 1; // 元素上下位置标记
                var radius = count > 2 ? count * 10 + 20 : 50; // 半径距离
                for (var j = 0, k = parseInt(count / 2); j < count; j++) {
                    var ele_x, ele_y;
                    // 上方元素
                    if (j < upDownTag) {
                        ele_x = Math.sin(radianNum * j) * radius;
                        ele_y = Math.cos(radianNum * j) * radius;
                        moveAnimation("#" + $(ele)[j].id, changeTime, -ele_x, -ele_y);
                    }
                    // 中间元素
                    if (j === upDownTag) {
                        moveAnimation("#" + $(ele)[j].id, changeTime, - radius, null);
                    }
                    // 下方元素
                    if (j > upDownTag) {
                        ele_x = Math.sin(radianNum * (k - 1)) * radius;
                        ele_y = Math.cos(radianNum * (k-- - 1)) * radius;
                        moveAnimation("#" + $(ele)[j].id, changeTime, -ele_x, ele_y);
                    }
                }
            }
        }

        /** 判断字符串是否为空
         * param  ele 需要位移的元素的选择器填充内容(如 #id 名、.class 名)
         */
        function strIsEmpty(ele) {
            if (ele === null) { return true; }
            if (typeof ele === 'undefined') { return true; }
            if (typeof ele === 'string') {
                if (ele === "") { return true; }
                var reg = new RegExp("^([ ]+)|([　]+)$");
                return reg.test(ele);
            }
            return false;
        }

        /** 返回方法, 供外部使用 */
        return {
            getNum: getNum, // 将字符类型转换为数值
            getDataCount: getDataCount, // 获取当前数据总条数
            getSearchDataCount: getSearchDataCount, // 获取当前搜索数据结果总条数
            getCurrentPageNum: getCurrentPageNum, // 获取当前页码
            switchBtn: switchBtn, // 开关按钮
            showOrHiddenEle: showOrHiddenEle, // 显隐元素
            opacityAnimation: opacityAnimation, // 透明度动作
            moveAnimation: moveAnimation, // 位移动作
            centreCircleScatterMove: centreCircleScatterMove, // 圆心散射位移动作
            strIsEmpty: strIsEmpty, // 判断字符串是否为空
        };
    }

    /** 公共样式 */
    function publicStyle() {
        /** .secondBtn样式 */
        function setStyle_secondBtn() {
            $(".secondBtn").css({
                "z-index": "2147483646",
                "border-radius": "20px",
                width: "40px",
                height: "40px",
                right: "5px",
                bottom: listener_bottom + 15 + "px",
                opacity: 0,
                visibility: "hidden",
                position: "fixed",
                outline: "none",
                border: "2px solid rgb(232, 0, 73)",
            });
        }

        /** #tabCmpt th样式 */
        function setStyle_tabCmpt_th() {
            $("#tabCmpt th").css({
                "text-align": "-webkit-center",
                "font-size": "smaller",
                "background-color": micouaMainColor1,
                "border-top": "1px solid " + micouaMainColor6,
                "border-bottom": "1px solid " + micouaMainColor6,
                "border-right": "1px solid " + micouaMainColor6,
                padding: "7px"
            });
        }

        /** #tabCmpt tr样式 */
        function setStyle_tabCmpt_tr() {
            var tabCmpt_tr = "#tabCmpt tr";
            $(tabCmpt_tr).css({ "background-color": micouaMainColor4, border: "1px solid " + micouaMainColor2, height: "35px" });

            /* 点击样式 */
            $(tabCmpt_tr).not("#tabSearchWebRow").not("#tabSearchEleRow").not("#pagination").mousedown(function () {
                if ($("#searchTab tr").length != 0 && !tools().strIsEmpty($("#searchWebBtn").val()) && $("#searchWebBtn").val() != currentURL) {
                    var defaultWeb = $("#searchTab tr")[0].innerText;
                    defaultWeb = defaultWeb.toLowerCase().indexOf("当前网址") != -1 ? defaultWeb.substring(5) : defaultWeb;
                    $("#searchWebBtn").focus().val(defaultWeb);
                }
                $("#searchDiv").remove();
            });

            /* 悬停样式 */
            $(tabCmpt_tr).not("#tabSearchWebRow").not("#tabSearchEleRow").not("#pagination").hover(function () {
                $(this).css({ "background-color": micouaMainColor1 });
            }, function () {
                $(this).css({ "background-color": micouaMainColor4 });
            });

            /* 空行样式 */
            $("#tabCmpt .nullRow").hover(function () {
                $(this).css({ "background-color": micouaMainColor4 });
            }, function () {
                $(this).css({ "background-color": micouaMainColor4 });
            });

            /* 搜索框样式 */
            $("#tabCmpt .searchBtn").hover(function () {
                $(this).css({ "background-color": micouaMainColor4 });
            }, function () {
                $(this).css({ "background-color": micouaMainColor4 });
            });

            /* 搜索行样式 */
            $("#tabCmpt .tabSearchRow").css({
                "border-top": "none",
                "border-bottom": "none"
            });
        }

        /** #tabCmpt td样式 */
        function setStyle_tabCmpt_td() {
            $("#tabCmpt td").css({ "font-size": "5px" });

            /* 末位空格样式 */
            $("#tabCmpt .lastTd, .nullRow").css({ "border-right": "1px solid " + micouaMainColor2 });
        }

        /** #tabCmpt .searchBtn样式 */
        function setStyle_tabCmpt_searchBtn() {
            var tabCmpt_searchBtn = "#tabCmpt .searchBtn";
            $(tabCmpt_searchBtn).css({
                "background-color": micouaMainColor5,
                "border-radius": "5px",
                "font-size": "10px",
                width: "50%",
                float: "left",
                outline: "none",
                border: "1px solid " + micouaMainColor7,
                margin: "5px",
                padding: "4px 0px 4px 10px",
            });

            /* 实时搜索数据 */
            var dataName = $("#btnNameTag").attr("name");
            $("#searchWebBtn").on("input propertychange change click", function () {
                baseFunction().tabComponent().loadData().getSearchDataList("#searchWebBtn");
                baseFunction().tabComponent().loadData().getTabDataList(dataName, 1);
            });
            $("#searchEleBtn").on("input propertychange change click", function () {
                if (tools().strIsEmpty($("#searchEleBtn").val())) {
                    $("#searchEleBtn").attr("onKeypress", event.keyCode == 32 ? false : true);
                    $("#searchEleBtn").val(undefined);
                } else {
                    $("#searchEleBtn").attr("onKeypress", event.keyCode == 32 ? true : false);
                    baseFunction().tabComponent().loadData().getTabDataList(dataName, 1);
                }
            });

            /* 悬停样式 */
            $(tabCmpt_searchBtn).hover(function () {
                $(this).css({ border: "1px solid " + micouaMainColor3 });
            }, function () {
                if (!$(this).is(":focus")) { $(this).css({ "background-color": micouaMainColor5, border: "1px solid " + micouaMainColor7 }); }
            });

            /* 聚焦样式 */
            $(tabCmpt_searchBtn).focus(function () { $(this).css({ border: "1px solid " + micouaMainColor3 }); });
            /* 失焦样式 */
            $(tabCmpt_searchBtn).blur(function () { $(this).css({ "background-color": micouaMainColor5, border: "1px solid " + micouaMainColor7 }); });
        }

        /** #tabCmpt .btn样式 */
        function setStyle_tabCmpt_btn() {
            var tabCmpt_btn = "#micouaDiv .btn";
            $(tabCmpt_btn).css({
                "background-color": micouaMainColor5,
                "border-radius": "5px",
                "font-size": "10px",
                outline: "none",
                border: "1px solid " + micouaMainColor7,
                margin: "5px",
                padding: "2px 6px",
                cursor: "pointer"
            });

            /* 悬停样式 */
            $(tabCmpt_btn).hover(function () {
                $(this).css({ border: "1px solid " + micouaMainColor3 });
            }, function () {
                $(this).css({ border: "1px solid " + micouaMainColor7 });
            });

            /* 鼠标按下 */
            $(tabCmpt_btn).mousedown(function () {
                $(this).css({ "background-color": micouaMainColor6, color: micouaMainColor4 });
            });
            /* 鼠标释放 */
            $(tabCmpt_btn).mouseup(function () {
                $(this).css({ "background-color": micouaMainColor5, color: "" });
            });
        }

        /** #tabCmpt .pageNumBtn样式
         *  @param  currentPageNum 当前页码
         *  @param  totalPageNum 总页码
         */
        function setStyle_tabCmpt_pageNumBtn(currentPageNum, totalPageNum) {
            /* 页码按钮样式 */
            $("#tabCmpt .pageNumBtn").css({ margin: "2px", padding: "1px 3px" });
            $("#tabCmpt #paginationTd").css({ border: "1px solid " + micouaMainColor2 });

            /* 当前页样式 */
            var str_currentPageNum = "#tabCmpt #pageNum" + currentPageNum;
            $(str_currentPageNum).attr("status", "currentPage");
            $(str_currentPageNum).css({ "background-color": micouaMainColor6, color: micouaMainColor4 });
            $(str_currentPageNum).hover(function () { $(this).css({ border: "1px solid " + micouaMainColor7 }); }, function () { $(this).css({ border: "1px solid " + micouaMainColor7 }); });
            $(str_currentPageNum).mousedown(function () { $(this).css({ "background-color": micouaMainColor6, color: micouaMainColor4 }); });

            /* 禁用按钮 */
            if (currentPageNum === 1) {
                $("#tabCmpt #firstPageNum").attr("disabled", 'disabled'); // 首页
                $("#tabCmpt #prePageNum").attr("disabled", 'disabled'); // 上页
            }
            if (currentPageNum === totalPageNum) {
                $("#tabCmpt #nextPageNum").attr("disabled", 'disabled'); // 下页
                $("#tabCmpt #lastPageNum").attr("disabled", 'disabled'); // 尾页
            }

            /* 翻页按钮样式 */
            $("#tabCmpt .changeOnePageBtn").css({
                "transform": "scale(0.8)",
                padding: "1px 4px 2px 3px"
            });
            $("#tabCmpt .changeAllPageBtn").css({
                padding: "0px 2px"
            });

            /* 禁用按钮样式 */
            $("#tabCmpt input[disabled='disabled']").css({ cursor: "no-drop" });
        }

        /** #searchTab tr样式 */
        function setStyle_searchTab_tr() {
            var searchTab_tr = "#searchTab tr";
            var searchTab_td = "#searchTab td";
            var searchTab_search_text = "#searchTab .selectText";
            $(searchTab_td).css({
                "font-size": "13px",
                "padding-left": "10px"
            });
            $(searchTab_search_text).css({ color: micouaMainColor8 });

            /* 点击事件 */
            $(searchTab_tr).on("click", function () {
                $("#searchWebBtn").focus().val($(this).attr("value")).change(); // 自动聚焦搜索框
            });

            /* 悬停样式 */
            var newSelectWebText;
            var oldSelectWebText = $("#searchWebBtn").val();
            $("#searchTab").hover(function () {
                newSelectWebText = oldSelectWebText;
            }, function () {
                $("#searchWebBtn").focus().val(newSelectWebText);
            });
            $(searchTab_tr).hover(function () {
                $("#searchWebBtn").val("").focus().val($(this).attr("value")); // 自动聚焦搜索框
                $(this).css({ transition: "background-color 0.3s", "background-color": micouaMainColor9, cursor: "pointer" });
                $(this).find(" .selectWeb").css({ transition: "font-size 0.3s", "font-size": "15px", });
            }, function () {
                $(this).css({ transition: "background-color 0.3s", "background-color": micouaMainColor4 });
                $(this).find(" .selectWeb").css({ transition: "font-size 0.3s", "font-size": "13px", });
            });
        }

        /** #hintBoxDiv样式 */
        function setStyle_hintBoxDiv() {
            /* 点击样式 */
            $("#hintBoxDiv").on("click", function () {
                $(this).css({ transition: "all 0.3s", opacity: "0", visibility: "hidden" });
            });
        }

        /** #confirmBoxDiv样式 */
        function setStyle_confirmBoxDiv() {
            /* 点击样式 */
            var confirmBtnTag = false;
            $("#confirmBtn").on("click", function () { $("#confirmBoxDiv").css({ transition: "all 0.3s", opacity: "0", visibility: "hidden" }); confirmBtnTag = true; });
            $("#cancelBtn").on("click", function () { $("#confirmBoxDiv").css({ transition: "all 0.3s", opacity: "0", visibility: "hidden" }); confirmBtnTag = false; });
            return confirmBtnTag;
        }

        /** 返回方法, 供外部使用 */
        return {
            setStyle_secondBtn: setStyle_secondBtn, // .secondBtn样式
            setStyle_tabCmpt_th: setStyle_tabCmpt_th, // #tabCmpt th样式
            setStyle_tabCmpt_tr: setStyle_tabCmpt_tr, // #tabCmpt tr样式
            setStyle_tabCmpt_td: setStyle_tabCmpt_td, // #tabCmpt td样式
            setStyle_tabCmpt_searchBtn: setStyle_tabCmpt_searchBtn, // #tabCmpt .searchBtn样式
            setStyle_tabCmpt_btn: setStyle_tabCmpt_btn, // #tabCmpt .btn样式
            setStyle_tabCmpt_pageNumBtn: setStyle_tabCmpt_pageNumBtn, // #tabCmpt .pageNumBtn样式
            setStyle_searchTab_tr: setStyle_searchTab_tr, // #searchTab tr样式
            setStyle_hintBoxDiv: setStyle_hintBoxDiv, // #hintBoxDiv样式
            setStyle_confirmBoxDiv: setStyle_confirmBoxDiv, // #confirmBoxDiv样式
        };
    }

    /** 加载完所有数据后进入主函数 */
    if (true) main();
})();